package com.joymart.utils;

import net.sourceforge.pinyin4j.PinyinHelper;
import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;
import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;
import net.sourceforge.pinyin4j.format.HanyuPinyinVCharType;

import java.util.Random;

public class ChineseNameGenerator {
    // 常用姓氏列表，包括复姓
    private static final String[] SURNAMES = {
            "李", "王", "张", "刘", "陈", "杨", "赵", "黄", "周", "吴",
            "徐", "孙", "胡", "朱", "高", "林", "何", "郭", "马", "罗",
            "梁", "宋", "郑", "谢", "韩", "唐", "冯", "于", "董", "萧",
            "曹", "袁", "邓", "许", "傅", "沈", "曾", "彭", "吕", "苏",
            "卢", "蒋", "蔡", "魏", "叶", "田", "杜", "丁", "姚", "薛",
            "尹", "闫", "夏", "钟", "汪", "范", "方", "石", "程", "甘",
            "余", "任", "金", "汤", "贺", "邱", "白", "赖", "段", "孔",
            "司马", "欧阳", "诸葛", "上官", "东方", "尉迟", "长孙", "公孙", "轩辕", "令狐"
    };

    // 常用名字的字
    private static final String[] GIVEN_NAMES = {
            "伟", "芳", "娜", "敏", "静", "丽", "强", "磊", "军", "洋", "勇", "艳", "杰", "娟", "涛",
            "明", "超", "秀英", "霞", "平", "刚", "鹏", "华", "丹", "桂英", "建国", "春花", "富贵", "俊杰",
            "玉兰", "桂珍", "德财", "国华", "文杰", "丽娟", "桂芬", "永强", "志伟", "天宇", "子涵",
            "梓豪", "思雨", "欣怡", "佳怡", "嘉豪", "诗涵", "子轩", "欣然", "俊豪", "晨曦", "一诺",
            "依依", "梦琪", "子萱", "佳琪", "梦瑶", "宇轩", "梓涵", "若曦", "家豪", "昊天", "睿杰",
            "锦程", "欣妍", "美琪", "梦怡", "欣妤", "雨欣", "昕妍", "家豪", "诗雨", "若汐", "梓萱",
            "明轩", "佳欣", "思涵", "浩宇", "子豪", "浩然", "子怡", "若霖", "嘉怡", "雅婷", "诗晴",
            "梓瑜", "晓涵", "欣妤", "梦莹", "俊辰", "涵韵", "雨菲", "天一", "子欣", "子宁", "昊然",
            "嘉萱", "佳萱", "依然", "宇航", "子萌", "一帆", "天宇", "宇辰", "梓楠", "语嫣", "若琪",
            "一涵", "梦晗", "昕彤", "佳彤", "依涵", "俊铭", "梓琪", "思睿", "语桐", "沐晨", "梓欣",
            "子辰", "雨彤", "佳沐", "晓彤", "诗韵", "静怡", "若依", "若涵", "若溪", "宇宁", "铭轩",
            "昊轩", "浩然", "晓轩", "宇豪", "子晴", "佳晴", "晓晴", "诗婷", "一鸣", "天乐", "若宁",
            "晓楠", "锦轩", "锦程", "锦豪", "天明", "晓涵", "锦然", "铭然", "诗然", "梓桐", "锦豪",
            "铭桐", "语桐", "语嫣", "语凝", "梓凝", "诗凝", "思桐", "思琪", "天琪", "天晴", "语晴",
            "语然", "语韵", "思晴", "思然", "晓然", "若婷", "若婷", "晓婷", "佳婷", "静婷", "晓韵",
            "梓琳", "思琳", "语琳", "晓琳", "锦琳", "若琳", "铭琳", "一琳", "若昕", "晓昕", "锦昕"};

    private static final Random RANDOM = new Random();

    /**
     * 生成一个随机的中文名字
     * @return 随机中文名字
     */
    public static String generateName() {
        String surname = SURNAMES[RANDOM.nextInt(SURNAMES.length)];
        // 随机选择一个名
        String givenName = GIVEN_NAMES[RANDOM.nextInt(GIVEN_NAMES.length)];
        // 组合返回
        return surname + givenName;
    }

    /**
     * 将中文字符串转换为全拼
     * @param chinese 中文字符串
     * @return 全拼拼音
     */
    public static String toPinyin(String chinese) {
        StringBuilder pinyin = new StringBuilder();
        HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat();
        format.setCaseType(HanyuPinyinCaseType.LOWERCASE); // 小写拼音
        format.setToneType(HanyuPinyinToneType.WITHOUT_TONE); // 无声调
        format.setVCharType(HanyuPinyinVCharType.WITH_V); // 使用 'v' 表示 ü

        char[] chars = chinese.toCharArray();
        for (char c : chars) {
            try {
                // 判断是否为中文字符
                if (Character.toString(c).matches("[\\u4e00-\\u9fa5]")) {
                    String[] pinyinArray = PinyinHelper.toHanyuPinyinStringArray(c, format);
                    if (pinyinArray != null) {
                        pinyin.append(pinyinArray[0]); // 取第一个读音
                    }
                } else {
                    // 非中文字符直接添加
                    pinyin.append(c);
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return pinyin.toString();
    }
    public static void main(String[] args) {
        // 生成并打印 10 个名字
        for (int i = 0; i < 10; i++) {
            String name = generateName();
            System.out.println(name);
            System.out.println(toPinyin(name));
        }
    }
}